SoSe2022
→ Warum nicht jede Tiefe mit der Kontrolle mittels t-Test vergleichen?
p.adjust() wandelt unkorrigierte p-Werte in korrigierte mittels Bonferroni-, Bonferroni-Holm- und weiteren Korrekturen um.\[H=\frac{12}{N*(N+1)}*\left( \sum\frac{R_i^2}{n_i} \right)-3*(N+1)\]
N = Gesamter Stichprobenumfang, \(n_i\) = Anzahl Messung pro Gruppe \(i\), \(R_i\) = Summe der Ränge pro Gruppe \(i\)
\[F_r=\left( \frac{12}{n*k*(k+1)}*\left( \sum R_i^2\right)\right)-3*n*(k+1)\]
n = Anzahl der Blöcke, k = Anzahl der Gruppen, \(R_i\) = Summe der Ränge pro Gruppe \(i\)
irisdf <- iris %>% mutate(ranks_sl = rank(Sepal.Length, ties.method = "average")) %>% group_by(Species) %>% summarise(sum_ranks = sum(ranks_sl)) df
# A tibble: 3 × 2 Species sum_ranks <fct> <dbl> 1 setosa 1482 2 versicolor 4132. 3 virginica 5710.
(h_sl <- 12/(150*(150+1))*sum(df$sum_ranks^2/50) - 3*(150+1))
[1] 96.76096
pchisq(h_sl, df = 3-1, lower.tail = FALSE)
[1] 9.741475e-22
kruskal.test() iris# x = abhängige Variable, g = Gruppierungsvariable/Faktor kruskal.test(x = iris$Sepal.Length, g = iris$Species)
# kruskal.test(x ~ g, data) kruskal.test(Sepal.Length ~ Species, data = iris)
Kruskal-Wallis rank sum test
data: Sepal.Length by Species
Kruskal-Wallis chi-squared = 96.937, df = 2, p-value < 2.2e-16friedman.test()friedman.test(y, groups, blocks) # y = abhängige Variable # groups = Messwiederholung -> eigentlich zu untersuchender Faktor # blocks = zu untersuchende Objekte # oder Formelsyntax friedman.test(y ~ groups|blocks, data)
irisEs soll die Hypothese getestet werden, dass sich die durchschnittliche Kronblattweite der drei Iris Arten unterscheidet.
kruskal.test(Petal.Width ~ Species, data = iris)
Kruskal-Wallis rank sum test
data: Petal.Width by Species
Kruskal-Wallis chi-squared = 131.19, df = 2, p-value < 2.2e-16factor definiert werden!Gewichtsunterschiede von Atlantischem Lachs, der in 4 verschiedenen Typen von Netzkäfigen gezüchtet wurde.
| Replikat | Typ A | Typ B | Typ C | Typ D |
|---|---|---|---|---|
| 1 | 2.0 | 2.7 | 2.9 | 2.2 |
| 2 | 2.7 | 2.0 | 1.9 | 2.0 |
| 3 | 2.2 | 3.8 | 2.7 | 3.1 |
| … | … | … | … | … |
| 24 | 3.1 | 1.5 | 2.5 | 2.7 |
| Mittelwert | 2.5 | 2.5 | 2.5 | 2.5 |
Gesamtmittelwert: 2.5
| Replikat | Typ A | Typ B | Typ C | Typ D |
|---|---|---|---|---|
| 1 | 5.0 | 4.1 | 2.9 | 0.8 |
| 2 | 5.0 | 4.1 | 2.9 | 0.8 |
| 3 | 5.0 | 4.1 | 2.9 | 0.8 |
| … | … | … | … | … |
| 24 | 5.0 | 4.1 | 2.9 | 0.8 |
| Mittelwert | 5.0 | 4.1 | 2.9 | 0.8 |
Gesamtmittelwert: 2.5
| Sources of variation | SS | df | MS | F | p |
|---|---|---|---|---|---|
| Groups (between) | \(n \sum(\bar{y_i}-\bar{y})^2\) | \(p-1\) | \(\frac{SS_{Groups}}{(p-1)}\) | \(\frac{MS_{Groups}}{MS_{Residuals}}\) | |
| Residuals (within) | \(\sum\sum(y_{ij}-\bar{y_i})^2\) | \(p(n-1)\) | \(\frac{SS_{Residuals}}{p(n-1)}\) | ||
| Total | \(n \sum(y_{ij}-\bar{y})^2\) | \(pn-1\) |
H0:
Sowohl \(MS_{Groups}\) als auch \(MS_{Residuals}\) schätzen \(\sigma^2\) → Quotient = 1
| Sources of variation | SS | df | MS | F | p |
|---|---|---|---|---|---|
| Groups | 50.66 | 4-1 | 16.888 | 83.77 | <2e-16 |
| Residuals (or within) | 18.55 | 4*(24-1) | 0.202 | ||
| TotalTotal | 69.21 | 4*24-1 |
aov()aov(formula, data = NULL, projections = FALSE, qr = TRUE, contrasts = NULL, ...)
Die volle ANOVA Tabelle erhältst Du aber nur mit der summary() Funktion, die auf das aov Objekt angewendet wird:
model <- aov(formula = y ~ factor, data) summary(model)
mod <- aov(formula = weight ~ cages, data = salmon) mod
Call:
aov(formula = weight ~ cages, data = salmon)
Terms:
cages Residuals
Sum of Squares 50.66326 18.54609
Deg. of Freedom 3 92
Residual standard error: 0.4489855
Estimated effects may be unbalanced
summary(mod)
Df Sum Sq Mean Sq F value Pr(>F) cages 3 50.66 16.888 83.77 <2e-16 *** Residuals 92 18.55 0.202 --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
par(mfrow = c(2,2)) plot(mod)
Die Berechnung der Effektgröße für Designs zwischen Gruppen ist viel einfacher als für Designs innerhalb von Gruppen:
\[\eta^2 = \frac{SS_{Groups}}{SS_{Total}}\]
50.66 / (50.66 + 18.55)
[1] 0.7319751
# Allgemein anwendbarer Code mod_sum <- summary(mod) # str(mod_sum) eta_sq <- mod_sum[[1]]$`Sum Sq`[1] / (mod_sum[[1]]$`Sum Sq`[1] + mod_sum[[1]]$`Sum Sq`[2] ) eta_sq
[1] 0.7320291
plot.design()plot.design(weight ~ cages, data = salmon)
Zuerst müssen die p-Werte der paarweisen t-Tests extrahiert werden:
# Datensatz ins weite Format bringen sw <- salmon %>% mutate(id = rep(1:24, 4)) %>% pivot_wider(names_from = "cages", values_from = "weight") # p-Werte der paarweisen t-Tests im Vektor speichern p_vals <- c( t.test(sw$A, sw$B, equal.var = TRUE)$p.value, t.test(sw$A, sw$C, equal.var = TRUE)$p.value, t.test(sw$A, sw$D, equal.var = TRUE)$p.value, t.test(sw$B, sw$C, equal.var = TRUE)$p.value, t.test(sw$B, sw$D, equal.var = TRUE)$p.value, t.test(sw$C, sw$D, equal.var = TRUE)$p.value )
Nun kann die p.adjust() Funktion angewendet werden:
p_vals
[1] 3.401267e-04 1.507993e-14 1.699829e-03 3.113790e-09 8.912992e-10 [6] 1.804047e-19
p.adjust(p_vals, method = "bonferroni")
[1] 2.040760e-03 9.047960e-14 1.019897e-02 1.868274e-08 5.347795e-09 [6] 1.082428e-18
p.adjust(p_vals, method = "holm")
[1] 6.802534e-04 7.539967e-14 1.699829e-03 9.341370e-09 3.565197e-09 [6] 1.082428e-18
TukeyHSD()mod <- aov(formula = weight ~ cages, data = salmon) TukeyHSD(mod)
Tukey multiple comparisons of means
95% family-wise confidence level
Fit: aov(formula = weight ~ cages, data = salmon)
$cages
diff lwr upr p adj
B-A 0.5300004 0.1908584 0.86914230 0.0005296
C-A 1.5323398 1.1931979 1.87148174 0.0000000
D-A -0.4078477 -0.7469896 -0.06870573 0.0117375
C-B 1.0023394 0.6631975 1.34148137 0.0000000
D-B -0.9378480 -1.2769900 -0.59870610 0.0000000
D-C -1.9401875 -2.2793294 -1.60104554 0.0000000Bei weiteren Fragen: saskia.otto(at)uni-hamburg.de

Diese Arbeit is lizenziert unter einer Creative Commons Attribution-ShareAlike 4.0 International License mit Ausnahme der entliehenen und mit Quellenangabe versehenen Angaben.